카본 (API)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
카본(Carbon)은 애플이 개발한 Mac OS X 운영체제에서 사용된 API로, 기존 Classic Mac OS의 코드를 현대적인 Unix 기반 OS에서 실행할 수 있도록 설계되었다. 2000년에 처음 도입되어 파인더, 어도비 포토샵 등 주요 소프트웨어에 널리 사용되었으나, 64비트 환경 지원의 제약과 코코아(Cocoa) API의 등장으로 점차 사용이 중단되었다. 2012년 이후 대부분의 카본 API는 사용 중단되었으며, 2017년에는 macOS에서 32비트 소프트웨어 지원이 중단됨에 따라 카본 응용 프로그램에 대한 지원이 완전히 종료되었다. 카본은 파일, 메모리, 사용자 인터페이스 등을 관리하는 매니저로 구성되며, C 언어를 사용하여 코코아 API와 유사한 기능을 제공했다.
더 읽어볼만한 페이지
- 호환성 계층 - 와인 (소프트웨어)
와인(Wine)은 유닉스 계열 운영체제에서 윈도우 응용 프로그램을 실행하기 위한 호환성 계층으로, 윈도우 API를 직접 구현하여 윈도우 프로그램이 리눅스, macOS 등에서 실행되도록 지원하며, 여러 기업의 후원을 받아 꾸준히 발전해왔다. - 호환성 계층 - 시그윈
Cygwin은 윈도우에서 유닉스 시스템과 유사한 환경을 제공하는 소프트웨어로, POSIX API 구현 및 다양한 개발 도구를 통해 유닉스 기반 소프트웨어의 개발, 빌드, 실행을 지원한다. - MacOS API - 오픈스텝
오픈스텝은 넥스트와 선 마이크로시스템즈가 개발한 객체 지향 프로그래밍 환경 및 API 표준으로, 넥스트스텝을 기반으로 다양한 운영체제에서 실행 가능하도록 설계되었으며, macOS, iOS의 Cocoa API 및 GNUstep과 같은 자유 소프트웨어 구현체의 기반이 되었다. - MacOS API - 코어 오디오
코어 오디오는 macOS의 오디오 프레임워크로서 낮은 레이턴시와 유연한 설계를 특징으로 하며, 오디오 유닛 플러그인, 다양한 오디오 포맷, 그리고 하드웨어 추상화 계층 등의 서비스로 구성된다.
카본 (API) - [IT 관련 정보]에 관한 문서 | |
---|---|
일반 정보 | |
이름 | 카본 |
개발사 | 애플 |
중단 여부 | 예 |
운영 체제 | 클래식 맥 OS macOS |
라이선스 | 사유 |
2. 역사
1996년 말, 애플은 NeXT를 인수하고 OPENSTEP for Mach 플랫폼을 기반으로 새로운 운영 체제 전략을 개발했다. 새로운 Rhapsody OS 전략은 "Yellow Box"라는 이름으로 OpenStep의 기존 객체 라이브러리 대부분을 유지하고, OPENSTEP for Mach의 기존 GUI를 이식하여 Mac과 유사하게 만들었으며, QuickTime 및 AppleSearch 등 Mac OS의 여러 주요 API를 Rhapsody의 기본 유닉스 계열 시스템으로 이식했다. 또한 "Blue Box"라는 에뮬레이터를 추가하여 기존 Mac OS 소프트웨어를 실행할 수 있도록 했다.[1]
1997년 세계 개발자 회의(WWDC)에서 이 계획이 공개되자, 기존 Mac OS 개발자들은 코드 기반이 업데이트될 가능성이 없는 에뮬레이터에 갇히게 될 것이라는 사실에 불만을 품고 반발했다. 그들은 Blue Box를 "패널티 박스"라고 불렀다. 마이크로소프트와 어도비 같은 대형 개발사들은 즉시 거부했고, 기존 Mac OS와 호환성이 거의 또는 전혀 없었기 때문에 OpenStep으로의 이식을 고려하지 않았다.[1]
애플은 이러한 우려를 심각하게 받아들였다. 1998년 다음 WWDC에서 스티브 잡스는 "개발자들이 진정으로 원했던 것은 Mac OS의 현대적인 버전이었고, 애플이 이를 제공할 것"이라고 말하며 애플의 방향 전환을 발표했다.[1]
기존 Mac OS 소프트웨어를 실행하기 위한 Blue Box만 포함된 원래의 Rhapsody 개념은 1999년에 Mac OS X Server 1.0으로 출시되었다. 이것은 원래 Rhapsody 개념을 기반으로 한 유일한 릴리스였다.[1]
Mac OS 기존 코드 기반의 실제적이고 잘 지원되는 업그레이드 경로를 제공하기 위해, 애플은 카본 시스템을 도입했다. 카본은 맥과 유사한 API를 제공하지만, 에뮬레이션으로 실행되는 Mac OS의 복사본이 아닌, 기본 Unix와 유사한 OS 위에서 실행되는 여러 라이브러리와 함수로 구성된다. 카본 라이브러리는 광범위하게 정리되고 현대화되었으며 더 잘 "보호"되었다. Mac OS가 데이터를 전달하기 위해 메모리를 공유하는 API로 가득 찬 반면, 카본에서는 모든 그러한 접근이 접근자 메서드를 통해 재구현되었다. 이를 통해 카본은 진정한 컴퓨터 멀티태스킹과 메모리 보호를 지원할 수 있었는데, 이는 Mac 개발자들이 10년 동안 요청해 온 기능이었다. 기존 API에서 다른 변경 사항은 Mac OS X와 개념적으로 호환되지 않거나 단순히 구식인 기능을 제거했다. 예를 들어, 응용 프로그램은 더 이상 인터럽트 핸들러 또는 장치 드라이버를 설치할 수 없었다.[1]
카본을 지원하기 위해, 전체 Rhapsody 모델이 변경되었다. Rhapsody가 실제로 에뮬레이터와 함께 OpenStep였던 반면, 새로운 시스템에서는 OpenStep와 Carbon API가 가능한 경우 공통 코드를 공유하게 되었다. 이를 위해, Objective-C로 작성되어 Foundation으로 알려진 OpenStep 시스템의 하위 수준에서 유용한 코드 조각의 상당수가 순수한 C로 재구현되었다. 이 코드는 Core Foundation, 또는 CF로 알려지게 되었다. CF를 호출하도록 이식된 Yellow Box 버전은 새로운 코코아 API가 되었고, 카본의 Mac과 유사한 호출 또한 동일한 함수를 호출했다. 새로운 시스템에서 카본과 코코아는 동등한 위치에 있었다. 이 변환은 객체 메서드가 기본 C 라이브러리를 호출하면서 코코아의 성능을 저하시켰지만, 애플은 이러한 영향을 줄이기 위해 ''무료 브릿징''이라고 불리는 기술을 사용했다.[1]
이 변환의 일환으로, 애플은 또한 라이선스 제한이 있는 디스플레이 포스트스크립트에서 라이선스 없는 쿼츠("디스플레이 PDF"라고도 함)로 그래픽 엔진을 이식했다.[2] 쿼츠는 카본 또는 코코아에서 사용할 수 있는 네이티브 호출을 제공하며, Java 2D와 유사한 인터페이스도 제공했다. 기본 운영 체제 자체는 추가로 격리되어 다윈으로 출시되었다.
Carbon은 2000년에 1997년의 Mac OS 8.1과 하위 호환되는 공유 라이브러리 형태로 불완전하게 도입되었다. 이 버전은 개발자가 기존 Mac OS 머신에서 해당 프로그램 실행 능력을 잃지 않고 Carbon으로 코드를 이식할 수 있도록 했다. Carbon으로의 이식은 "Carbon화"로 알려지게 되었다. 공식 Mac OS X 지원은 Mac OS X v10.0의 2001년 출시와 함께 이루어졌다. Carbon은 초기 버전의 Mac OS X에서 애플을 포함한 거의 모든 주요 소프트웨어 회사에서 매우 광범위하게 사용되었다. 예를 들어, 파인더는 2009년 Mac OS X 10.6 출시와 함께 코코아로 이식되기 전까지 수년 동안 Carbon 응용 프로그램으로 남아 있었다.[3]
QuickTime 팀이 API를 Mac OS X에 이식하기 위해 호환 레이어를 만든 것이 원형이 되었다. 그것이 스티브 잡스의 눈에 띄어 범용 호환 프레임워크 아이디어로 채택되었다.
Carbon API를 이용한 응용 프로그램을 '''Carbon 응용 프로그램'''이라고 부른다. Mac OS X에 탑재된 또 다른 API인 코코아가 Objective-C 코드를 작성해야 하는 데 비해, Carbon API는 Classic Mac OS에서 유래한 인터페이스를 가지고 있어 C/C++에서도 사용할 수 있다. 기본적으로 Toolbox와 소스 코드 호환을 목표로 하고 있어 단순한 이식만 한다면 그렇게 큰 설계 변경은 필요하지 않았다.
Carbon 응용 프로그램에는 Mac OS X에서도 Classic Mac OS에서도 실행할 수 있는 PEF Carbon과 Mac OS X 전용 Mach-O Carbon 두 종류가 존재했다.[15] PEF는 Preferred Executable Format의 약자로, CFM(Code Fragment Manager) Carbon이라고도 한다. PEF는 기존부터 사용되어 온 형식이기 때문에 Classic Mac OS와 Mac OS X, 두 환경에서 모두 동작할 수 있었다. 단, CFM Carbon 응용 프로그램도 실행에는 CarbonLib이라는 기능 확장 문서가 필요하며, 이것이 없으면 Classic Mac OS에서는 동작하지 않는다. Mach-O Carbon은 Mac OS X에 최적화되어 있어 CFM Carbon보다 약간 더 빠르게 동작한다. 또한, Quartz를 비롯한 Mac OS X 특유의 API를 이용하기 위해서는 Mach-O 형식이 가장 적합하다. 이 형식은 dyld라고도 불린다. 그대로는 Classic Mac OS에서는 동작하지 않지만, Mac OS 9에서 도입된 응용 프로그램 패키지를 이용하여 하나의 폴더 안에 Carbon 응용 프로그램과 Classic Mac OS용 응용 프로그램 두 개를 동봉하여 하나의 응용 프로그램처럼 보이게 하는 경우도 있었다.
Mac OS X가 보급된 지 얼마 동안은 CFM Carbon이 대부분이었지만, 개발 환경이 최적화되면서 Mach-O Carbon이 대부분이 되었다. (Xcode의 이용에 의한) Mach-O화는 Universal Binary화에 필수적이다. 또한, Cocoa는 Carbon과 반드시 대립하는 것은 아니며, 처음에는 Carbon 기반의 라이브러리를 래핑하여 Cocoa 응용 프로그램으로 구현한 것, Cocoa 기반의 컴포넌트가 포함된 Carbon 응용 프로그램 등 다양한 구현 형태의 소프트웨어가 존재했다.
Mac OS X v10.2에서 Mac OS X v10.4에 걸쳐, Carbon은 초창기에는 Cocoa와 동등한 개발 기반으로서 점차 구조의 현대화가 시도되었다. (HIObject(사용자 정의 컨트롤을 생성하기 위한 기능 집합) 도입, Mac OS X 전체의 공유 기반이라 할 수 있는 Core Foundation과의 호환성 강화 등)
하지만 Mac OS X v10.5에서의 64비트 지원은 UI 부분이 보류되었고[16], 64비트 완전 지원에는 Cocoa로의 전환이 필수적이 되는 등, 애플은 GUI 프론트 엔드로서의 Carbon을 점차 페이드 아웃시키고, Cocoa를 메인으로 하는 방향을 강화해나갔다. Mac OS X v10.6에서는 기존 Carbon 기반이었던 QuickTime과 파인더가 Cocoa로 다시 제작되었다.
2007년 10월 26일에 출시된 Mac OS X v10.5부터 시작된 64비트 Macintosh 응용 프로그램으로의 전환은 Carbon에 첫 번째 주요 제한을 가져왔다. 애플은 64비트 환경에서 Macintosh 그래픽 사용자 인터페이스와 C 프로그래밍 언어 간의 호환성을 제공하지 않고, 대신 Cocoa API와 함께 Objective-C를 사용하도록 요구했다.[4] 많은 논평가들은 이를 Carbon의 궁극적인 소멸의 첫 번째 징후로 받아들였으며, 애플이 Carbon 시스템에 새로운 주요 기능이 추가되지 않을 것이라고 밝히면서 이러한 입장이 강화되었고,[5][6] 2012년에 사용 중단되면서 더욱 강화되었다.
OS X Mountain Lion부터 카본 사용이 권장되지 않게 되었다.[16] macOS Catalina부터는 32비트 애플리케이션 지원과 함께 카본도 폐지되어, Cocoa로 다시 제작되지 않은 카본 애플리케이션은 완전히 동작하지 않게 되었다.
2. 1. 클래식 Mac OS 프로그래밍
초창기 Mac OS는 주요 개발 플랫폼으로 파스칼을 사용했으며, API는 파스칼의 호출 규약에 크게 기반을 두었다. 매킨토시 툴박스의 상당 부분은 API와 프로그램 간에 다양한 자료 구조를 사용하여 정보를 주고받는 프로시저 호출로 구성되었으며, 이는 파스칼의 variant record 개념에 기반을 두었다.시간이 지남에 따라 Mac에서 여러 객체 라이브러리가 발전했는데, 특히 Object Pascal 라이브러리인 MacApp과 THINK C의 Think Class Library, 그리고 나중에 MacApp과 CodeWarrior의 PowerPlant의 C++ 버전이 있다.
2. 2. Rhapsody (랩소디)
1996년 말 애플은 NeXT를 인수하고, OPENSTEP for Mach 플랫폼을 기반으로 새로운 운영 체제 전략을 개발했다. 새로운 Rhapsody OS 전략은 "Yellow Box"라는 이름으로 OpenStep의 기존 객체 라이브러리 대부분을 유지하고, OPENSTEP for Mach의 기존 GUI를 이식하여 Mac과 유사하게 만들었으며, QuickTime 및 AppleSearch 등 Mac OS의 여러 주요 API를 Rhapsody의 기본 유닉스 계열 시스템으로 이식했다. 또한 "Blue Box"라는 에뮬레이터를 추가하여 기존 Mac OS 소프트웨어를 실행할 수 있도록 했다.[1]1997년 세계 개발자 회의 (WWDC)에서 이 계획이 공개되자, 기존 Mac OS 개발자들은 코드 기반이 업데이트될 가능성이 없는 에뮬레이터에 갇히게 될 것이라는 사실에 불만을 품고 반발했다. 그들은 Blue Box를 "패널티 박스"라고 불렀다. 마이크로소프트와 어도비 같은 대형 개발사들은 즉시 거부했고, 기존 Mac OS와 호환성이 거의 또는 전혀 없었기 때문에 OpenStep으로의 이식을 고려하지 않았다.[1]
애플은 이러한 우려를 심각하게 받아들였다. 1998년 다음 WWDC에서 스티브 잡스는 "개발자들이 진정으로 원했던 것은 Mac OS의 현대적인 버전이었고, 애플이 이를 제공할 것"이라고 말하며 애플의 방향 전환을 발표했다.[1]
Rhapsody 개념을 기반으로 한 유일한 릴리스는 기존 Mac OS 소프트웨어를 실행하기 위한 Blue Box만 포함된 1999년 Mac OS X Server 1.0이었다.[1]
2. 3. Cocoa와 Carbon
애플은 기존 Mac OS 사용자들에게 실질적이고 잘 지원되는 업그레이드 경로를 제공하기 위해 카본 시스템을 도입했다. 카본은 맥과 유사한 API를 제공하지만, 에뮬레이션이 아닌 기본 Unix와 유사한 OS 위에서 실행되는 현대화된 라이브러리와 함수들로 구성된다. 카본은 접근자 메서드를 통해 데이터를 주고받아, 진정한 컴퓨터 멀티태스킹과 메모리 보호를 지원한다. 이는 Mac 개발자들이 오랫동안 요청해 온 기능이었다.[1]카본을 지원하기 위해 Rhapsody 모델이 변경되었다. OpenStep와 카본 API가 공통 코드를 공유하도록, Foundation의 유용한 코드 조각들이 순수한 C로 재구현되어 Core Foundation(CF)이 되었다. Yellow Box는 코코아 API가 되었고, 카본의 Mac과 유사한 호출 또한 동일한 함수를 호출했다. 이로써 카본과 코코아는 동등한 위치에 놓이게 되었다. 애플은 '무료 브릿징' 기술을 통해 코코아의 성능 저하를 줄이고자 했다.[1]
이 과정에서 애플은 라이선스 제한이 있던 디스플레이 포스트스크립트 대신 라이선스 없는 쿼츠(디스플레이 PDF라고도 함)로 그래픽 엔진을 이식했다.[2]
2. 4. 출시와 발전

Carbon은 2000년에 1997년의 Mac OS 8.1과 하위 호환되는 공유 라이브러리 형태로 불완전하게 도입되었다. 이 버전은 개발자가 기존 Mac OS 머신에서 해당 프로그램 실행 능력을 잃지 않고 Carbon으로 코드를 이식할 수 있도록 했다. Carbon으로의 이식은 "Carbon화"로 알려지게 되었다. 공식 Mac OS X 지원은 2001년 Mac OS X v10.0 출시와 함께 이루어졌다. Carbon은 초기 버전의 Mac OS X에서 애플(Apple Inc.)을 포함한 거의 모든 주요 소프트웨어 회사에서 매우 광범위하게 사용되었다. 예를 들어, 파인더는 2009년 Mac OS X 10.6 출시와 함께 코코아로 이식되기 전까지 수년 동안 Carbon 응용 프로그램으로 남아 있었다.[3]
Mac OS X v10.2에서 Mac OS X v10.4에 걸쳐, Carbon은 초창기에는 Cocoa와 동등한 개발 기반으로서 점차 구조의 현대화가 시도되었다. (HIObject(사용자 정의 컨트롤을 생성하기 위한 기능 집합) 도입, Mac OS X 전체의 공유 기반이라 할 수 있는 Core Foundation과의 호환성 강화 등)
하지만 Mac OS X v10.5에서의 64비트 지원은 UI 부분이 보류되었고[16], 64비트 완전 지원에는 Cocoa로의 전환이 필수적이 되는 등, 애플은 GUI 프론트 엔드로서의 Carbon을 점차 페이드 아웃시키고, Cocoa를 메인으로 하는 방향을 강화해나갔다. Mac OS X v10.6에서는 기존 Carbon 기반이었던 QuickTime과 파인더가 Cocoa로 다시 제작되었다.
2007년 10월 26일에 출시된 Mac OS X v10.5부터 시작된 64비트 Macintosh 응용 프로그램으로의 전환은 Carbon에 첫 번째 주요 제한을 가져왔다. 애플(Apple Inc.)은 64비트 환경에서 Macintosh 그래픽 사용자 인터페이스와 C 프로그래밍 언어 간의 호환성을 제공하지 않고, 대신 Cocoa API와 함께 Objective-C를 사용하도록 요구했다.[4] 많은 논평가들은 이를 Carbon의 궁극적인 소멸의 첫 번째 징후로 받아들였으며, 애플(Apple Inc.)이 Carbon 시스템에 새로운 주요 기능이 추가되지 않을 것이라고 밝히면서 이러한 입장이 강화되었고,[5][6] 2012년에 사용 중단되면서 더욱 강화되었다.
코코아의 이점에도 불구하고, 방대한 양의 기존 코드를 다시 작성해야 할 필요성 때문에 카본 기반 응용 프로그램의 전환이 늦어졌으며, 대표적인 예로 2010년 4월에 코코아로 업데이트된 어도비 포토샵(Adobe Photoshop)이 있다.[7] 이는 아이튠즈(iTunes)[8]와 파이널 컷 프로(Final Cut Pro) (그리고 이를 구동하는 퀵타임(QuickTime) 엔진의 기능[9])과 같은 애플의 주요 소프트웨어 패키지에도 적용되었으며, 수년 동안 카본으로 작성되었다. 아이튠즈와 파이널 컷 프로 X는 이후 코코아 버전으로 출시되었다.
macOS Catalina부터는 32비트 애플리케이션 지원과 함께 Carbon도 폐지되어, Cocoa로 다시 제작되지 않은 Carbon 애플리케이션은 완전히 동작하지 않게 되었다.
2. 5. Cocoa로의 전환
코코아의 이점에도 불구하고, 방대한 양의 기존 코드를 다시 작성해야 할 필요성 때문에 카본 기반 응용 프로그램의 전환이 늦어졌으며, 대표적인 예로 2010년 4월에 코코아로 업데이트된 어도비 포토샵(Adobe Photoshop)이 있다.[7] 이는 아이튠즈(iTunes)[8]와 파이널 컷 프로(Final Cut Pro) (그리고 이를 구동하는 퀵타임(QuickTime) 엔진의 기능[9])과 같은 애플의 주요 소프트웨어 패키지에도 적용되었으며, 수년 동안 카본으로 작성되었다. 아이튠즈와 파이널 컷 프로 X는 이후 코코아 버전으로 출시되었다.2. 6. 지원 중단
OS X Mountain Lion부터 카본 사용이 권장되지 않게 되었다.[16] macOS Catalina부터는 32비트 애플리케이션 지원과 함께 카본도 폐지되어, Cocoa로 다시 제작되지 않은 카본 애플리케이션은 완전히 동작하지 않게 되었다.3. 구조
카본은 Toolbox에서 파생되었으며, "매니저"라고 불리는 기능적으로 관련된 API들의 집합으로 구성된다. 각 매니저는 데이터 구조와 이를 조작하는 함수 집합을 정의하며, 서로 상호 의존적이거나 계층화되어 있기도 하다.
카본은 애플이 맥 OS 기존 코드 기반에서 실제적이고 잘 지원되는 업그레이드 경로를 제공하기 위해 도입한 시스템이다. 카본은 맥과 유사한 API를 제공하지만, Mac OS의 복사본을 에뮬레이션으로 실행하는 것이 아니라, 기본 Unix와 유사한 OS 위에서 실행되는 여러 라이브러리와 함수로 구성된다. 카본 라이브러리는 광범위하게 정리되고 현대화되었으며 더 잘 "보호"되었다. Mac OS가 데이터를 전달하기 위해 메모리를 공유하는 API로 가득 찬 반면, 카본에서는 모든 그러한 접근이 접근자 메서드를 통해 재구현되었다. 이를 통해 카본은 진정한 컴퓨터 멀티태스킹과 메모리 보호를 지원할 수 있었는데, 이는 Mac 개발자들이 10년 동안 요청해 온 기능이었다.
카본을 지원하기 위해, 전체 Rhapsody 모델이 변경되었다. Rhapsody가 에뮬레이터와 함께 OpenStep였던 반면, 새로운 시스템에서는 OpenStep와 Carbon API가 가능한 경우 공통 코드를 공유하게 되었다. 이를 위해, Objective-C로 작성되어 Foundation으로 알려진 OpenStep 시스템의 하위 수준에서 유용한 코드 조각의 상당수가 순수한 C로 재구현되었다. 이 코드는 Core Foundation(CF)으로 알려지게 되었다. CF를 호출하도록 이식된 Yellow Box 버전은 새로운 코코아 API가 되었고, 카본의 Mac과 유사한 호출 또한 동일한 함수를 호출했다. 새로운 시스템에서 카본과 코코아는 동등한 위치에 있었다. 이 변환은 객체 메서드가 기본 C 라이브러리를 호출하면서 코코아의 성능을 저하시켰지만, 애플은 이러한 영향을 줄이기 위해 ''무료 브릿징''이라고 불리는 기술을 사용했다.[1]
애플은 또한 라이선스 제한이 있는 디스플레이 포스트스크립트에서 라이선스 없는 쿼츠(디스플레이 PDF)로 그래픽 엔진을 이식했다.[2] 쿼츠는 카본 또는 코코아에서 사용할 수 있는 네이티브 호출을 제공하며, Java 2D와 유사한 인터페이스도 제공했다. 기본 운영 체제 자체는 추가로 격리되어 다윈으로 출시되었다.
카본의 최신 부분은 개념적으로 훨씬 더 객체 지향적인 경향이 있으며, 대부분 Core Foundation을 기반으로 한다. HIView Manager(Control Manager의 상위 집합)와 같은 일부 매니저는 C++로 구현되지만 카본은 여전히 C API이다.
3. 1. 주요 구성 요소
카본은 애플이 맥 OS 기존 코드 기반에서 실제적이고 잘 지원되는 업그레이드 경로를 제공하기 위해 도입한 시스템이다. 카본은 맥과 유사한 API를 제공하지만, Mac OS의 복사본을 에뮬레이션으로 실행하는 것이 아니라, 기본 Unix와 유사한 OS 위에서 실행되는 여러 라이브러리와 함수로 구성된다. 카본 라이브러리는 광범위하게 정리되고 현대화되었으며 더 잘 "보호"되었다. Mac OS가 데이터를 전달하기 위해 메모리를 공유하는 API로 가득 찬 반면, 카본에서는 모든 그러한 접근이 접근자 메서드를 통해 재구현되었다. 이를 통해 카본은 진정한 컴퓨터 멀티태스킹과 메모리 보호를 지원할 수 있었는데, 이는 Mac 개발자들이 10년 동안 요청해 온 기능이었다. 기존 API에서 다른 변경 사항은 Mac OS X와 개념적으로 호환되지 않거나 단순히 구식인 기능을 제거한 것이다.[1]카본은 Toolbox에서 파생되었으며, "매니저"로 구성된다. 각 매니저는 기능적으로 관련된 API이며, 데이터 구조와 이를 조작하는 함수 집합을 정의한다. 매니저는 종종 상호 의존적이거나 계층화되어 있다. 카본은 파일, 메모리, 데이터, 사용자 인터페이스 및 기타 시스템 서비스를 관리하기 위한 광범위한 기능 집합으로 구성된다. 이는 다른 API와 마찬가지로 구현된다. macOS에서는 주로 `Carbon.framework`, `ApplicationServices.framework` 및 `CoreServices.framework`와 같은 여러 프레임워크(각각 공유 라이브러리를 기반으로 구축된 구조)에 분산되어 있으며, classic Mac OS에서는 `'''CarbonLib'''`이라는 단일 공유 라이브러리에 있다.
Mac 전용 기능에 접근하는 모든 C 언어 API 프로시저를 포괄하는 상위 용어인 카본은 독립적인 시스템으로 설계되지 않았다. 대신, 광범위하게 동등한 Cocoa API에 필요한 Objective-C 언어를 모르는 개발자에게 macOS의 거의 모든 기능을 열어준다.[12]
카본은 PowerPC Mac OS에서 사용할 수 있는 여러 실행 파일 형식과 호환된다. Mac OS X와 이전 버전 간의 바이너리 호환성을 위해서는 애플이 자체 Xcode IDE에서 지원하지 않은 선호 실행 형식 파일을 사용해야 한다.
카본의 최신 부분은 개념적으로 훨씬 더 객체 지향적인 경향이 있으며, 대부분 Core Foundation을 기반으로 한다. HIView Manager(Control Manager의 상위 집합)와 같은 일부 매니저는 C++로 구현되지만 카본은 여전히 C API이다.
Carbon 매니저의 몇 가지 예는 다음과 같다.
매니저 | 설명 |
---|---|
파일 매니저 | 파일 시스템에 대한 접근을 관리하고, 파일을 열고, 닫고, 읽고, 쓴다. |
리소스 매니저 | 프로그램이 필요로 할 수 있는 미리 정의된 데이터 덩어리인 리소스에 대한 접근을 관리한다. 디스크 파일에서 리소스를 읽고 쓰기 위해 파일 매니저를 호출한다. 리소스의 예로는 아이콘, 소리, 이미지, 위젯 템플릿 등이 있다. |
폰트 매니저 | 글꼴을 관리한다. Apple Type Services (ATS)를 선호하여 Mac OS X v10.4부터 (QuickDraw의 일부로) 더 이상 사용되지 않는다. |
퀵드로 | 2D 그래픽 기본 요소. Quartz 2D를 선호하여 Mac OS X v10.4부터 더 이상 사용되지 않는다. |
카본 이벤트 매니저 | 사용자 및 시스템 활동을 코드가 인식하고 응답할 수 있는 이벤트로 변환한다. |
HIObject | 카본에 GUI를 구축하기 위한 OO 모델을 제공하는 완전히 새로운 객체 지향 API이다. Mac OS Classic 및 Copland의 HIToolbox[13]는 더 이상 사용되지 않는 IBM System Object Model에 의존했기 때문에 카본은 레거시 코드의 이식을 활성화하기 위해 빠르고 간단한 대체 기능을 제공해야 했다. 이는 Mac OS X v10.2 이상에서 사용할 수 있으며, Cocoa 개발자가 오랫동안 익숙해진 일부 도구를 Carbon 프로그래머에게 제공한다. Mac OS X v10.2부터 HIObject는 Carbon의 모든 GUI 요소의 기본 클래스이다. HIView는 Apple의 개발자 도구의 일부인 Interface Builder에서 지원된다. 전통적으로 이러한 종류의 GUI 아키텍처는 타사 응용 프로그램 프레임워크에서 제공했다. Mac OS X v10.4부터 HIObjects는 NSObjects이며, 전송 또는 디스크에 저장을 위해 데이터 스트림으로 직렬화할 수 있는 기능을 상속받는다. |
HITheme | 그래픽 사용자 인터페이스 (GUI) 요소를 화면에 렌더링하기 위해 QuickDraw 및 Quartz를 사용한다. HITheme는 Mac OS X v10.3에 도입되었으며, Appearance Manager는 해당 버전부터 HITheme 위에 있는 호환성 계층이다. |
HIView Manager | 컨트롤의 생성, 그리기, 히트 테스트 및 조작을 관리한다. Mac OS X v10.2부터 모든 컨트롤은 HIView이다. Mac OS X v10.4에서 Control Manager는 HIView Manager로 이름이 변경되었다. |
윈도우 매니저 | 윈도우의 생성, 배치, 업데이트 및 조작을 관리한다. Mac OS X v10.2부터 윈도우는 루트 HIView를 갖는다. |
메뉴 매니저 | 메뉴의 생성, 선택 및 조작을 관리한다. Mac OS X v10.2부터 메뉴는 HIObject이다. Mac OS X v10.3부터 메뉴 내용은 HIView를 사용하여 그릴 수 있으며, 모든 표준 메뉴는 HIView를 사용하여 그린다. |
QuickTime 팀이 API를 Mac OS X에 이식하기 위해 호환 레이어를 만든 것이 원형이 되었다. 그것이 스티브 잡스의 눈에 띄어 범용 호환 프레임워크 아이디어로 채택되었다. Toolbox API 중에서 분명히 레거시이고 잘 사용되지 않는 것은 폐지하고 내부 구조를 32비트를 전제로 재설계하였다(Toolbox는 16비트 코드이며 PowerPC의 성능에 발목을 잡고 있었다).
Carbon API를 이용한 응용 프로그램을 '''Carbon 응용 프로그램'''이라고 부른다. Mac OS X에 탑재된 또 다른 API인 Cocoa가 Objective-C 코드를 작성해야 하는 데 비해, Carbon API는 Classic Mac OS에서 유래한 인터페이스를 가지고 있어 C/C++에서도 사용할 수 있다. 기본적으로 Toolbox와 소스 코드 호환을 목표로 하고 있어 단순한 이식만 한다면 그렇게 큰 설계 변경은 필요하지 않았다.
Carbon 응용 프로그램에는,
- 하나의 바이너리로 Mac OS X에서도 Classic Mac OS에서도 실행할 수 있는 『'''PEF Carbon'''』
- Mac OS X 전용 『'''Mach-O Carbon'''』
두 종류가 존재했다.[15]
PEF는 Preferred Executable Format의 약자로, CFM(Code Fragment Manager) Carbon이라고도 한다. PEF는 기존부터 사용되어 온 형식이기 때문에 Classic Mac OS와 Mac OS X, 두 환경에서 모두 동작할 수 있었다. 단, CFM Carbon 응용 프로그램도 실행에는 CarbonLib이라는 기능 확장 문서가 필요하며, 이것이 없으면 Classic Mac OS에서는 동작하지 않는다.
Mach-O Carbon은 Mac OS X에 최적화되어 있어 CFM Carbon보다 약간 더 빠르게 동작한다. 또한, Quartz를 비롯한 Mac OS X 특유의 API를 이용하기 위해서는 Mach-O 형식이 가장 적합하다. 이 형식은 dyld라고도 불린다. 그대로는 Classic Mac OS에서는 동작하지 않지만, Mac OS 9에서 도입된 응용 프로그램 패키지를 이용하여 하나의 폴더 안에 Carbon 응용 프로그램과 Classic Mac OS용 응용 프로그램 두 개를 동봉하여 하나의 응용 프로그램처럼 보이게 하여 Classic Mac OS와 Mac OS X 두 환경에서 실행할 수 있게 하는 경우도 있었다.
Mac OS X가 보급된 지 얼마 동안은 CFM Carbon이 대부분이었지만, 개발 환경이 최적화되면서 Mach-O Carbon이 대부분이 되었다. (Xcode의 이용에 의한) Mach-O화는 Universal Binary화에 필수적이다. 또한, Cocoa는 Carbon과 반드시 대립하는 것은 아니며, 처음에는 Carbon 기반의 라이브러리를 래핑하여 Cocoa 응용 프로그램으로 구현한 것, Cocoa 기반의 컴포넌트가 포함된 Carbon 응용 프로그램 등 다양한 구현 형태의 소프트웨어가 존재했다.
3. 2. Carbon 매니저
카본은 여러 "매니저"들로 구성되며, 각 매니저는 기능적으로 관련된 API를 담당한다. 이들은 데이터 구조와 이를 조작하는 함수 집합을 정의하며, 서로 의존하거나 계층화되어 있기도 하다. 카본은 파일, 메모리, 데이터, 사용자 인터페이스, 기타 시스템 서비스를 관리하는 다양한 기능을 제공하며, macOS에서는 주로 `Carbon.framework`, `ApplicationServices.framework`, `CoreServices.framework` 등의 프레임워크에 분산되어 있다.카본 매니저의 예시는 다음과 같다.
매니저 | 설명 |
---|---|
파일 매니저 | 파일 시스템 접근을 관리하고, 파일을 열고 닫으며, 읽고 쓰는 기능을 담당한다. |
리소스 매니저 | 프로그램에 필요한 아이콘, 소리, 이미지 등 미리 정의된 데이터 덩어리(리소스)에 대한 접근을 관리한다. 파일 매니저를 호출하여 디스크 파일에서 리소스를 읽고 쓴다. |
폰트 매니저 | 글꼴을 관리한다. Mac OS X v10.4부터 ATS를 선호하여 더 이상 사용되지 않는다. |
퀵드로 | 2D 그래픽 기본 요소를 담당한다. Mac OS X v10.4부터 Quartz 2D를 선호하여 더 이상 사용되지 않는다. |
카본 이벤트 매니저 | 사용자 및 시스템 활동을 코드가 인식하고 응답할 수 있는 이벤트로 변환한다. |
HIObject | 카본에 GUI 구축을 위한 객체 지향 모델을 제공하는 새로운 API이다. Mac OS X v10.2부터 모든 GUI 요소의 기본 클래스이며, Interface Builder에서 지원된다. Mac OS X v10.4부터 NSObjects이다. |
HITheme | GUI 요소를 화면에 렌더링하기 위해 퀵드로 및 쿼츠를 사용한다. Mac OS X v10.3에 도입되었으며, 이전의 Appearance Manager는 HITheme 위에 있는 호환성 계층이다. |
HIView Manager | 컨트롤의 생성, 그리기, 히트 테스트, 조작을 관리한다. Mac OS X v10.2부터 모든 컨트롤은 HIView이며, Mac OS X v10.4에서 Control Manager는 HIView Manager로 이름이 변경되었다. |
윈도우 매니저 | 윈도우의 생성, 배치, 업데이트 및 조작을 관리한다. Mac OS X v10.2부터 윈도우는 루트 HIView를 가진다. |
메뉴 매니저 | 메뉴의 생성, 선택 및 조작을 관리한다. Mac OS X v10.2부터 메뉴는 HIObject이며, Mac OS X v10.3부터 메뉴 내용은 HIView를 사용하여 그릴 수 있다. |
4. 이벤트 처리
클래식 Mac OS의 툴박스 이벤트 관리자는 원래 폴링 모델을 사용하도록 설계되었다. 애플리케이션의 메인 이벤트 루프는 이벤트 관리자에게 `GetNextEvent`를 사용하여 이벤트를 요청한다. 큐에 이벤트가 있으면 이벤트 관리자가 이를 애플리케이션에 전달하여 처리하고, 그렇지 않으면 즉시 반환한다. 이러한 동작은 "바쁜 대기"라고 하며, 불필요하게 이벤트 루프를 실행한다. 바쁜 대기는 다른 애플리케이션에 사용 가능한 CPU 시간을 줄이고 랩톱의 배터리 전원을 감소시킨다. 클래식 이벤트 관리자는 1984년 최초의 Mac OS에서 시작되었으며, 당시 실행 중인 애플리케이션이 ''유일한'' 실행 중인 애플리케이션으로 보장되었고, 전원 관리는 고려 사항이 아니었다.
MultiFinder가 등장하고 둘 이상의 애플리케이션을 동시에 실행할 수 있게 되면서 새로운 이벤트 관리자 호출인 ''WaitNextEvent''가 도입되었으며, 애플리케이션은 절전 간격을 지정할 수 있다. 레거시 코드가 소스 코드를 크게 변경하지 않고도 더 효율적인 모델을 채택하는 쉬운 방법은 ''WaitNextEvent''에 전달된 절전 매개변수를 매우 큰 값으로 설정하는 것이다. macOS에서는 아무것도 할 일이 없을 때 스레드를 절전 상태로 만들고, 처리할 이벤트가 있을 때만 이벤트를 반환한다. 이러한 방식으로 폴링 모델은 애플리케이션이 원래 방식대로 자체 이벤트 디스패칭을 수행하는 콜백 모델과 동일하게 빠르게 전환된다. 그러나 허점이 있다. 예를 들어, 레거시 툴박스 호출인 ''ModalDialog''는 내부적으로 이전의 ''GetNextEvent'' 함수를 호출하여 차단 없이 타이트 루프에서 폴링이 발생한다.
카본은 카본 이벤트 관리자라는 대체 시스템을 도입한다. (원래 이벤트 관리자는 레거시 애플리케이션과의 호환성을 위해 여전히 존재한다). 카본 이벤트 관리자는 개발자를 위한 이벤트 루프를 제공한다(현재 구현에서 코어 파운데이션의 `CFRunLoop` 기반). 개발자는 이벤트 핸들러를 설정하고 메인 함수에서 이벤트 루프에 들어가 카본 이벤트 관리자가 애플리케이션에 이벤트를 디스패치할 때까지 기다린다.
5. 타이머
클래식 Mac OS에서는 응용 프로그램 수준 타이머에 대한 운영 체제 지원이 없었다. (하위 수준 Time Manager는 사용 가능했지만, 인터럽트 시에 타이머 콜백을 실행했으며, 이 동안 대부분의 툴박스 루틴을 안전하게 호출할 수 없었다.)[1] 타이머는 일반적으로 응용 프로그램 개발자가 구현해야 했으며, 이는 주로 '유휴' 이벤트(다른 이벤트가 없을 때 `WaitNextEvent`에 의해 반환되는 이벤트) 동안 경과 시간을 계산하는 방식으로 수행되었다.[1] 이러한 타이머가 합리적인 해상도를 가지려면 개발자는 `WaitNextEvent`가 너무 오래 지연되는 것을 막기 위해 낮은 "sleep" 매개변수를 설정해야 했다.[1] 이는 스레드가 오랫동안 잠들지 않고 유휴 이벤트를 반환하기 위해 반복적으로 깨어나게 만들어 매우 비효율적인 스케줄링 동작을 초래했다.[1] 애플은 이 문제를 해결하기 위해 카본에 타이머 지원을 추가했으며, 시스템은 매우 효율적으로 타이머를 예약할 수 있게 되었다.[1]
6. 오픈 소스 구현
GNUstep은 Boron이라고 불리는 Carbon API의 구현을 포함하고 있다. 이는 ApplicationServices와 CoreServices의 더 이상 사용되지 않는 부분을 제외한 부분과의 호환을 목표로 한다. Boron이 주기율표에서 Carbon보다 먼저 나온다는 사실에서 이름이 유래되었다.[14] Darling 역시 Carbon 구현을 포함하고 있다. 두 구현 모두 매우 불완전하며 주로 스텁 함수로 구성되어 있다.
참조
[1]
웹사이트
Concepts in Objective-C Programming: Toll-Free Bridging
https://developer.ap[...]
2017-05-08
[2]
웹사이트
Mac OS X Update: Quartz & Aqua
http://archive.arste[...]
2017-05-08
[3]
웹사이트
Apple moving Finder to Cocoa
http://www.cnet.com/[...]
2008-10-17
[4]
웹사이트
Introduction to 64-Bit Guide for Carbon Developers
https://developer.ap[...]
[5]
웹사이트
Choosing a Development Path for Your Carbon User Interface
https://developer.ap[...]
[6]
웹사이트
Rhapsody and blues
https://arstechnica.[...]
2023-02-05
[7]
웹사이트
Photoshop, Lightroom, and Adobe's 64-bit roadmap
http://blogs.adobe.c[...]
[8]
웹사이트
iTunes 10 hands-on: snappier performance, questionable UI choices
https://arstechnica.[...]
2010-09-03
[9]
웹사이트
Mac OS X 10.6 Snow Leopard: the Ars Technica review
https://arstechnica.[...]
2009-09
[10]
웹사이트
64-bit Requirement for Mac Apps
https://developer.ap[...]
2018-02-18
[11]
웹사이트
32-Bit Apps 'Not Optimized for Your Mac' to Stop Working on macOS Catalina
https://www.macrumor[...]
2019-08-10
[12]
웹사이트
Apple Carbon homepage
https://developer.ap[...]
[13]
문서
HIEditText SOM class description from Mac OS 8.0 (Copland) DDK
http://octagram.name[...]
[14]
웹사이트
gnustep/libs-boron: Boron is the atom that comes before carbon.
https://github.com/g[...]
GNUstep
2019-03-23
[15]
문서
CFMやMach-Oは[[アプリケーションバイナリインタフェース|ABI]] (Application Binary Interface) のことで、[[アプリケーションプログラミングインタフェース|API]] (Application Programming Interface) とは無関係。
[16]
문서
Choosing a Development Path for Your Carbon User Interface
http://developer.app[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com